home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-17 | 21.9 KB | 760 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWEventD.cpp
- // Release Version: $ ODF 2 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "FWFrameW.hpp"
-
- #ifndef FWEVENTD_H
- #include "FWEventD.h"
- #endif
-
- #ifndef FWEVENT_H
- #include "FWEvent.h"
- #endif
-
- #ifndef FWEVENTH_H
- #include "FWEventH.h"
- #endif
-
- #ifndef FWFRAME_H
- #include "FWFrame.h"
- #endif
-
- #ifndef FWPRESEN_H
- #include "FWPresen.h"
- #endif
-
- #ifndef FWSELECT_H
- #include "FWSelect.h"
- #endif
-
- #ifndef FWMNUBAR_H
- #include "FWMnuBar.h"
- #endif
-
- #ifndef FWPOINT_H
- #include "FWPoint.h"
- #endif
-
- #ifndef FWODMISS_H
- #include "FWODMiss.h"
- #endif
-
- #ifndef FWCURSOR_H
- #include "FWCursor.h"
- #endif
-
- #ifndef SLMIXOS_H
- #include "SLMixOS.h" // for FW_Beep
- #endif
-
- // ----- OpenDoc Includes -----
-
- #ifndef SOM_ODWindow_xh
- #include <Window.xh>
- #endif
-
- #ifndef SOM_ODFacet_xh
- #include <Facet.xh>
- #endif
-
- // ----- Macintosh Includes -----
-
- #if defined(FW_BUILD_MAC) && !defined(__TOOLUTILS__)
- #include <ToolUtils.h>
- #endif
-
- #pragma segment FWEvents
-
- //========================================================================================
- // globals
- //========================================================================================
-
- unsigned short FW_CEventDispatcher::fgAutoRepeatCount = 0;
-
- unsigned long FW_CEventDispatcher::fgLastMouseUp = 0;
- FW_PlatformPoint FW_CEventDispatcher::fgLastMouseUpWhere;
-
- short FW_CEventDispatcher::fgClickCount = 1;
-
- //========================================================================================
- // class FW_CEventDispatcher
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::FW_CEventDispatcher
- //----------------------------------------------------------------------------------------
-
- FW_CEventDispatcher::FW_CEventDispatcher() :
- fLastMouseDownTarget(NULL),
- fLastMouseDownFrame(NULL),
- fEventHandler(NULL),
- fMenuBar(NULL)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::FW_CEventDispatcher
- //----------------------------------------------------------------------------------------
-
- FW_CEventDispatcher::FW_CEventDispatcher(FW_MEventHandler* theEventHandler, FW_CMenuBar* theMenuBar) :
- fLastMouseDownTarget(NULL),
- fLastMouseDownFrame(NULL),
- fEventHandler(theEventHandler),
- fMenuBar(theMenuBar)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::~FW_CEventDispatcher
- //----------------------------------------------------------------------------------------
-
- FW_CEventDispatcher::~FW_CEventDispatcher()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::Dispatch
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::Dispatch(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODFacet* odFacet,
- ODEventInfo* eventInfo)
- {
- FW_Handled handled = FW_kNotHandled;
-
- #ifdef FW_BUILD_MAC
- switch (event->what)
- #endif
- #ifdef FW_BUILD_WIN
- switch (event->message)
- #endif
- {
-
- #ifdef FW_BUILD_MAC
- case nullEvent:
- #endif
- #ifdef FW_BUILD_WIN
- case WM_NULL:
- #endif
- handled = this->DispatchNullEvent(ev, event, fwFrame, eventInfo);
- break;
-
- #ifdef FW_BUILD_MAC
- case mouseDown:
- #endif
- #ifdef FW_BUILD_WIN
- case WM_LBUTTONDOWN:
- case WM_MBUTTONDOWN:
- case WM_RBUTTONDOWN:
- #endif
- #if FW_OPENDOC_VERSION >= FW_OPENDOC_DR3
- case kODEvtBGMouseDown:
- #ifdef FW_BUILD_MAC
- handled = this->DispatchMouseDownEvent(ev, event, fwFrame, odFacet, (event->what == kODEvtBGMouseDown), eventInfo);
- #endif
- #ifdef FW_BUILD_WIN
- handled = this->DispatchMouseDownEvent(ev, event, fwFrame, odFacet, (event->message == kODEvtBGMouseDown), eventInfo);
- #endif
- break;
- #else
- handled = this->DispatchMouseDownEvent(ev, event, fwFrame, odFacet, FALSE, eventInfo);
- break;
- #endif
-
- #ifdef FW_BUILD_MAC
- case mouseUp:
- #endif
- #ifdef FW_BUILD_WIN
- case WM_LBUTTONUP:
- case WM_MBUTTONUP:
- case WM_RBUTTONUP:
- #endif
- handled = this->DispatchMouseUpEvent(ev, event, fwFrame, odFacet, eventInfo);
- break;
-
- #ifdef FW_BUILD_MAC
- case keyDown:
- case autoKey:
- #endif
- #ifdef FW_BUILD_WIN
- case WM_KEYDOWN:
- #endif
- handled = this->DispatchVirtualKeyDownEvent(ev, event, fwFrame, eventInfo);
- break;
-
- #ifdef FW_BUILD_MAC
- case keyUp:
- #endif
- #ifdef FW_BUILD_WIN
- case WM_KEYUP:
- #endif
- handled = this->DispatchVirtualKeyUpEvent(ev, event, fwFrame, eventInfo);
- break;
-
- #ifdef FW_BUILD_WIN
- case WM_CHAR:
- handled = this->DispatchCharKeyEvent(ev, event, fwFrame, eventInfo);
- break;
- #endif
-
- #ifdef FW_BUILD_MAC
- case activateEvt:
- #endif
- #ifdef FW_BUILD_WIN
- case WM_ACTIVATE:
- #endif
- handled = this->DispatchActivateEvent(ev, event, fwFrame, odFacet, eventInfo);
- break;
-
- case kODEvtMenu:
- handled = this->DispatchMenuEvent(ev, event, fwFrame, eventInfo);
- break;
-
- #ifdef FW_BUILD_MAC
- case kODEvtWindow:
- handled = this->DispatchWindowEvent(ev, fwFrame, event, odFacet, eventInfo);
- break;
- case osEvt:
- handled = this->DispatchOSEvent(ev, fwFrame, event, odFacet, eventInfo);
- break;
- #endif
-
- case kODEvtMouseDownEmbedded:
- #if FW_OPENDOC_VERSION >= FW_OPENDOC_DR3
- case kODEvtBGMouseDownEmbedded:
- #ifdef FW_BUILD_MAC
- handled = this->DispatchEmbeddedMouseDownEvent(ev, event, fwFrame, odFacet, (event->what == kODEvtBGMouseDownEmbedded), eventInfo);
- #endif
- #ifdef FW_BUILD_WIN
- handled = this->DispatchEmbeddedMouseDownEvent(ev, event, fwFrame, odFacet, (event->message == kODEvtBGMouseDownEmbedded), eventInfo);
- #endif
- break;
- #else
- handled = this->DispatchEmbeddedMouseDownEvent(ev, event, fwFrame, odFacet, FALSE, eventInfo);
- break;
- #endif
-
- case kODEvtMouseUpEmbedded:
- handled = this->DispatchEmbeddedMouseUpEvent(ev, event, fwFrame, odFacet, eventInfo);
- break;
-
- case kODEvtMouseDownBorder:
- handled = this->DispatchBorderMouseDownEvent(ev, event, fwFrame, odFacet, eventInfo);
- break;
-
- case kODEvtMouseEnter:
- handled = fwFrame->HandleMouseEnter(ev, odFacet, FW_CPoint(eventInfo->where), eventInfo);
- break;
-
- case kODEvtMouseWithin:
- handled = fwFrame->HandleMouseWithin(ev, odFacet, FW_CPoint(eventInfo->where), eventInfo);
- break;
-
- case kODEvtMouseLeave:
- handled = fwFrame->HandleMouseLeave(ev, odFacet, eventInfo);
- break;
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchNullEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchNullEvent(Environment* ev, ODEventData* event, FW_CFrame* fwFrame, ODEventInfo* eventInfo)
- {
- FW_CNullEvent theNullEvent(ev, event, eventInfo->propagated);
- FW_MEventHandler* target = fEventHandler; // = the part by default
-
- if (fwFrame)
- {
- target = fwFrame->GetTarget(ev); // [LSD] to change with an idle class
- FW_ASSERT(target != NULL);
- }
-
- return target->HandleIdle(ev, theNullEvent);
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchMouseDownEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchMouseDownEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODFacet* odFacet,
- FW_Boolean inBackground,
- ODEventInfo* eventInfo)
- {
- // ofFacet is NULL when the user clicks outside a frame with the modal focus
- if (odFacet == NULL) {
- if (inBackground) {
- return FW_kNotHandled; // Let process manager bring the part to the foreground
- } else {
- FW_Beep(); // Click is lost
- return FW_kHandled;
- }
- }
-
- short numOfClicks = OnMouseDown(ev, event);
-
- FW_CMouseEvent theMouseEvent(ev, event, odFacet, FW_CMouseEvent::kMouseButtonDown, eventInfo->propagated, numOfClicks);
-
- FW_CPoint where = theMouseEvent.GetMousePosition(ev, FW_CMouseEvent::kFrame);
- FW_MEventHandler* target = fwFrame->GetViewContaining(ev, odFacet, where);
-
- fLastMouseDownTarget = target;
- fLastMouseDownFrame = fwFrame;
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = inBackground ? target->PrivDispatchBGMouseDown(ev, theMouseEvent)
- : target->PrivDispatchMouseDown(ev, theMouseEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchMouseUpEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchMouseUpEvent(Environment* ev, ODEventData* event, FW_CFrame* fwFrame, ODFacet* odFacet, ODEventInfo* eventInfo)
- {
- // ofFacet is NULL when the user clicks outside a frame with the modal focus
- if (!odFacet) return FW_kHandled;
-
- OnMouseUp(ev, event);
-
- FW_CMouseEvent theMouseEvent(ev, event, odFacet, FW_CMouseEvent::kMouseButtonUp, eventInfo->propagated);
-
- FW_MEventHandler* target = NULL;
-
- if (fLastMouseDownFrame == fwFrame)
- target = fLastMouseDownTarget;
- else
- {
- FW_CPoint where = theMouseEvent.GetMousePosition(ev, FW_CMouseEvent::kFrame);
- target = fwFrame->GetViewContaining(ev, odFacet, where);
- }
-
- fLastMouseDownTarget = NULL;
- fLastMouseDownFrame = NULL;
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = target->PrivDispatchMouseUp(ev, theMouseEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchEmbeddedMouseDownEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchEmbeddedMouseDownEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODFacet* odFacet,
- FW_Boolean inBackground,
- ODEventInfo* eventInfo)
- {
- short numOfClicks = OnMouseDown(ev, event);
-
- FW_Handled wasSelected = eventInfo->embeddedFacet->IsSelected(ev) ? FW_kHandled : FW_kNotHandled;
-
- FW_CEmbeddedMouseEvent theEmbeddedMouseEvent(ev,
- event,
- odFacet,
- eventInfo->embeddedFrame,
- eventInfo->embeddedFacet,
- FW_CMouseEvent::kMouseButtonDown,
- numOfClicks);
-
- if (!inBackground && fwFrame->ActivateWindow(ev, theEmbeddedMouseEvent.GetFacet(ev), TRUE))
- return FW_kHandled;
-
- FW_CSelection* selection = fwFrame->GetPresentation(ev)->GetSelection(ev);
- if (selection)
- selection->UpdateSelectionOnMouseDown(ev,
- theEmbeddedMouseEvent,
- theEmbeddedMouseEvent.GetEmbeddedFacet(ev),
- FALSE, // Not in active border
- FALSE); // Not in Background
-
- FW_CPoint where = theEmbeddedMouseEvent.GetMousePosition(ev, FW_CMouseEvent::kFrame);
- FW_MEventHandler* target = fwFrame->GetViewContaining(ev, odFacet, where);
-
- fLastMouseDownTarget = target;
- fLastMouseDownFrame = fwFrame;
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = inBackground ? target->PrivDispatchBGMouseDownInEmbeddedFrame(ev, theEmbeddedMouseEvent)
- : target->PrivDispatchMouseDownInEmbeddedFrame(ev, theEmbeddedMouseEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchEmbeddedMouseUpEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchEmbeddedMouseUpEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODFacet* odFacet,
- ODEventInfo* eventInfo)
- {
- OnMouseUp(ev, event);
-
- FW_CEmbeddedMouseEvent theEmbeddedMouseEvent(ev,
- event,
- odFacet,
- eventInfo->embeddedFrame,
- eventInfo->embeddedFacet,
- FW_CMouseEvent::kMouseButtonUp,
- eventInfo->propagated);
-
- FW_MEventHandler* target = NULL;
-
- if (fLastMouseDownFrame == fwFrame)
- target = fLastMouseDownTarget;
- else
- {
- FW_CPoint where = theEmbeddedMouseEvent.GetMousePosition(ev, FW_CMouseEvent::kFrame);
- target = fwFrame->GetViewContaining(ev, odFacet, where);
- }
-
- fLastMouseDownTarget = NULL;
- fLastMouseDownFrame = NULL;
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = target->PrivDispatchMouseUpInEmbeddedFrame(ev, theEmbeddedMouseEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchBorderMouseDownEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchBorderMouseDownEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODFacet* odFacet,
- ODEventInfo* eventInfo)
- {
- short numOfClicks = OnMouseDown(ev, event);
-
- FW_CBorderMouseEvent theBorderMouseEvent(ev,
- event,
- odFacet,
- eventInfo->embeddedFrame,
- eventInfo->embeddedFacet,
- FW_CMouseEvent::kMouseButtonDown,
- numOfClicks);
-
- FW_gClosedHandCursor.Select();
-
- FW_CSelection* selection = fwFrame->GetPresentation(ev)->GetSelection(ev);
- if (selection)
- selection->UpdateSelectionOnMouseDown(ev,
- theBorderMouseEvent,
- theBorderMouseEvent.GetEmbeddedFacet(ev),
- TRUE,
- FALSE);
-
- FW_CPoint where = theBorderMouseEvent.GetMousePosition(ev, FW_CMouseEvent::kFrame);
- FW_MEventHandler* target = fwFrame->GetViewContaining(ev, odFacet, where);
-
- fLastMouseDownTarget = target;
- fLastMouseDownFrame = fwFrame;
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = target->PrivDispatchMouseDownInEmbeddedFrameBorder(ev, theBorderMouseEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchVirtualKeyDownEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchVirtualKeyDownEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODEventInfo* eventInfo)
- {
- FW_Handled handled = FW_kNotHandled;
-
- #ifdef FW_BUILD_MAC
- if (event->what == autoKey)
- fgAutoRepeatCount++;
- else
- fgAutoRepeatCount = 0;
-
- FW_CVirtualKeyEvent theVirtualKeyEvent(ev, event, FW_CVirtualKeyEvent::kKeyDown, fgAutoRepeatCount);
- #endif
-
- #ifdef FW_BUILD_WIN
- FW_CVirtualKeyEvent theVirtualKeyEvent(ev, event, FW_CVirtualKeyEvent::kKeyDown, LOWORD(event->lParam));
- #endif
-
- FW_MEventHandler* target = fwFrame->GetTarget(ev);
- FW_ASSERT(target != NULL);
-
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = target->PrivDispatchVirtualKey(ev, theVirtualKeyEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- #ifdef FW_BUILD_MAC
- // If the keycode isn't used try the char
- if (handled == FW_kNotHandled)
- handled = this->DispatchCharKeyEvent(ev, event, fwFrame, eventInfo);
- #endif
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchVirtualKeyUpEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchVirtualKeyUpEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODEventInfo* eventInfo)
- {
- FW_CVirtualKeyEvent theVirtualKeyEvent(ev, event, FW_CVirtualKeyEvent::kKeyUp, eventInfo->propagated);
-
- FW_MEventHandler* target = fwFrame->GetTarget(ev);
- FW_ASSERT(target != NULL);
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = target->PrivDispatchVirtualKey(ev, theVirtualKeyEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchCharKeyEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchCharKeyEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODEventInfo* eventInfo)
- {
- #ifdef FW_BUILD_MAC
- FW_CCharKeyEvent theCharKeyEvent(ev, event, fgAutoRepeatCount, eventInfo->propagated);
- #endif
- #ifdef FW_BUILD_WIN
- FW_CCharKeyEvent theCharKeyEvent(ev, event, LOWORD(event->lParam), eventInfo->propagated);
- #endif
-
- FW_MEventHandler* target = fwFrame->GetTarget(ev);
- FW_ASSERT(target != NULL);
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = target->PrivDispatchCharKey(ev, theCharKeyEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchActivateEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchActivateEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODFacet* odFacet,
- ODEventInfo* eventInfo)
- {
- FW_UNUSED(fwFrame);
-
- #ifdef FW_BUILD_MAC
- FW_CActivateEvent theActivateEvent(ev, event, odFacet, (event->modifiers & activeFlag ) != 0, eventInfo->propagated);
- #endif
- #ifdef FW_BUILD_WIN
- FW_CActivateEvent theActivateEvent(ev, event, odFacet, (event->wParam != WA_INACTIVE), eventInfo->propagated);
- #endif
-
- fwFrame->HandleActivateEvent(ev, theActivateEvent);
- return FW_kHandled;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchMenuEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchMenuEvent(Environment* ev,
- ODEventData* event,
- FW_CFrame* fwFrame,
- ODEventInfo* eventInfo)
- {
- ODCommandID theCommand;
-
- #ifdef FW_BUILD_MAC
- ODMenuID menu = HiWord(event->message);
- ODMenuItemID item = LoWord(event->message);
- theCommand = fMenuBar->PrivMacGetCommand(ev, menu, item);
- #endif
- #ifdef FW_BUILD_WIN
- theCommand = event->wParam;
- #endif
-
- FW_CMenuEvent theMenuEvent(ev, event, theCommand, eventInfo->propagated);
-
- FW_MEventHandler* target = fwFrame->GetTarget(ev);
- FW_ASSERT(target != NULL);
-
- FW_Handled handled = FW_kNotHandled;
- while (target != NULL && handled == FW_kNotHandled)
- {
- handled = target->PrivDispatchMenuEvent(ev, theMenuEvent);
-
- target = target->GetNextEventHandler(ev);
- }
-
- #ifdef FW_BUILD_MAC
- ::HiliteMenu(0);
- #endif
-
- return handled;
- }
-
- #ifdef FW_BUILD_MAC
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchWindowEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchWindowEvent(Environment* ev,
- FW_CFrame* fwFrame,
- ODEventData* event,
- ODFacet* odFacet,
- ODEventInfo* eventInfo)
- {
- FW_UNUSED(odFacet);
-
- FW_CMacWindowEvent windowEvent(ev, event, eventInfo->propagated);
-
- return fwFrame->HandleWindowEvent(ev, windowEvent);
- }
- #endif
-
- #ifdef FW_BUILD_MAC
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::DispatchOSEvent
- //----------------------------------------------------------------------------------------
-
- FW_Handled FW_CEventDispatcher::DispatchOSEvent(Environment* ev,
- FW_CFrame* fwFrame,
- ODEventData* event,
- ODFacet* odFacet,
- ODEventInfo* eventInfo)
- {
- FW_Handled handled = FW_kNotHandled;
-
- if (((unsigned char) ( event->message >> 24 ) & 0x00FF) == 0x01)
- {
- const short kResumeMask = 0x01; // High byte suspend/resume event
-
- FW_Boolean goingToBackground = (event->message & kResumeMask) == 0;
- FW_CSuspendResumeEvent suspendResumeEvent(ev, event, odFacet, goingToBackground, eventInfo->propagated);
-
- handled = fwFrame->HandleSuspendResumeEvent(ev, suspendResumeEvent);
- }
-
- return handled;
- }
- #endif
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::OnMouseUp
- //----------------------------------------------------------------------------------------
-
- void FW_CEventDispatcher::OnMouseUp(Environment* ev, ODEventData* event)
- {
- FW_UNUSED(ev);
- #ifdef FW_BUILD_MAC
- fgLastMouseUp = event->when;
- fgLastMouseUpWhere = event->where;
- #endif
-
- #ifdef FW_BUILD_WIN
- fgLastMouseUp = 0;
- #endif
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEventDispatcher::OnMouseDown
- //----------------------------------------------------------------------------------------
-
- short FW_CEventDispatcher::OnMouseDown(Environment* ev, ODEventData* event)
- {
- FW_UNUSED(ev);
- #ifdef FW_BUILD_MAC
- if (event->when - fgLastMouseUp < ::GetDblTime())
- {
- short deltax = FW_Absolute(event->where.h - fgLastMouseUpWhere.h);
- short deltay = FW_Absolute(event->where.v - fgLastMouseUpWhere.v);
- if (deltax <= 4 && deltay <= 4)
- fgClickCount++;
- else
- fgClickCount = 1;
- }
- else
- fgClickCount = 1;
- #endif
-
- #ifdef FW_BUILD_WIN
- fgClickCount = 1;
- #endif
-
- return fgClickCount;
- }